電機控制_L298,包含仿真和程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (12.2 KB, 下載次數: 90)
下載附件
2020-12-3 22:33 上傳
51hei.png (12.52 KB, 下載次數: 77)
下載附件
2020-12-3 22:33 上傳
N298電機控制芯片引腳圖.jpg (48.13 KB, 下載次數: 58)
下載附件
2020-12-3 22:35 上傳
輸入信號與電機工作方式.jpg (39.15 KB, 下載次數: 61)
下載附件
2020-12-3 22:35 上傳
單片機源程序如下:
- //文件名 main.c 工程主文件
- #include "config.h"
- void main(void)
- {
- /******************************************************************************/
- //初始工作
- /******************************************************************************/
- init_devices();
-
- while(1)
- {
- for_ward(0); //默認速度運轉 正
- Delay1s(5); //延時5s
- motor_stop(); //停止
- Delay1s(5); //延時5s
- back_ward(0); //默認速度運轉 反
- Delay1s(5); //延時5s
- speed_add(20); //加速
- Delay1s(5); //延時5s
- speed_subtract(20); //減速
- Delay1s(5); //延時5s
- }
-
- }
- /******************************************************************************/
- // T2 控制PWM輸出
- // timer2_comp_isr不需要用,但是必須允許中斷,在中斷時有信號輸出變化
- /******************************************************************************/
- #pragma interrupt_handler timer2_comp_isr:5
- void timer2_comp_isr(void)
- {
- //compare occured TCNT0=OCR0
- }
- #pragma interrupt_handler timer2_ovf_isr:6
- void timer2_ovf_isr(void)
- {
- TCNT2 = 0x01;//reload counter value
- }
復制代碼- /****************************************************************
- ** 文件名:motor.c 電機驅動函數
- ****************************************************************/
- #include "config.h"
- /******************************************************************************/
- //正轉,速度
- void for_ward(uint8 speed)
- {
- if(speed!=0)
- {
- OCR2 = speed;
- while(ASSR&(1<<TCR2UB)==1) ; //啟動TC2 pwm 輸出,異步操作需要等待 OCR2寫入完畢
- }
- TC2_EN; //pwm_start
- moto_en1;
- moto_uen2;
- }
- /******************************************************************************/
- //反轉,速度
- void back_ward(uint8 speed)
- {
- if(speed!=0)
- {
- OCR2 = speed;
- while(ASSR&(1<<TCR2UB)==1) ;// 啟動TC2 pwm 輸出,異步操作需要等待OCR2寫入完畢
- }
- TC2_EN; //pwm start
- moto_uen1;
- moto_en2;
- }
- /******************************************************************************/
- //停止
- void motor_stop(void)
- {
- moto_en1; //同時置一停止
- moto_en2;
- TC2_DIS; //pwm stop
- }
- /******************************************************************************/
- //加速
- void speed_add(uint8 add)
- {
- if(OCR2 + add < 240) //防止出現極大情況時候跳躍到很小。
- {
- OCR2 = OCR2 + add;
- }
- }
- /******************************************************************************/
- //加速
- void speed_subtract(uint8 subtract)
- {
- if(OCR2 - subtract > 10) //防止到很小之后跳躍到很大。
- {
- OCR2 = OCR2 - subtract;
- }
- }
- /******************************************************************************/
復制代碼
51hei.png (8 KB, 下載次數: 67)
下載附件
2020-12-3 22:36 上傳
所有資料51hei提供下載:
電機控制_L298.zip
(247.46 KB, 下載次數: 29)
2020-12-3 20:34 上傳
點擊文件名下載附件
電機控制_L298 下載積分: 黑幣 -5
|