|
本帖最后由 moyuqilin 于 2016-1-26 21:58 編輯
PWM驅動電機,之前沒有接觸過帶有PWM的STC的芯片,在這個問題上卡了一天,小車上共用了4路PWM,PWM2,PWM3,PWM4,PWM5,。通過飛思卡爾的電機驅動芯片驅動電機,兩路驅動一個電機;
STC15系列中共有6通道高精度PWM,
在配置PWM相關寄存器前要先設置引腳模式,設置為推挽輸出
然后配置PWM相關寄存器,
P_SW2 |=0x80; //訪問特殊功能寄存器
P_SW2第7位設置為1,允許訪問接下來的特殊功能寄存器
PWMCFG=0x00; //設置PWM初始電平為低電平
PWMCKS = 0x00; //選擇PWM的時鐘為Fosc/(0+1)
配置PWM初始電平及時鐘
PWMC=20001; //PWM周期
PWM的周期設置,不太理解,可設置1-32767之間,手邊沒有示波器,沒有測試其效果
PWM2T1=20000; //PWM2第一次翻轉點
PWM2T2=20001; //PWM2第二次翻轉點
設置兩個PWM翻轉點,占空比=(PWM3T2-PWM3T1)/PWMC
其他通道的一樣設置,
PWM2CR=0x00;
PWM3CR=0x00;
PWM4CR=0x00;
PWM5CR=0x00;
控制各個通道PWM
PWMCR=0x8f; //使能PWM
這句話要在前面都配置好以后再配置
接下來就可以輸出PWM了,
在主程序中更改PWC和PWM2T1,PWM2T2,改變PWM波形
因為本次小車的電機由兩路PWM控制,之前在接觸STM32時用過互補PWM輸出,在這里也寫了一個,效果還可以
/*************************************************
**函數名: PWM2And3_HubuConter
**功能: PWM2,3,互補PWM控制電機
**說明: 占空比為50,電機停轉,為45和55時,轉速相同,方向相反
**入口參數: PWM周期CYCLE,占空比DUTY
**返回值: 無
************for*****moyuqilin19*******************/
void PWM2And3_HubuConter(long int CYCLE,long int DUTY)
{
PWMC=CYCLE;
PWM2T1=0x0000;
PWM2T2=CYCLE*DUTY/100;
PWM3T1=0x0000;
PWM3T2=CYCLE*(100L-DUTY)/100;
}
效果
IMG_20160126_215014.jpg (3.19 MB, 下載次數: 211)
下載附件
2016-1-26 21:52 上傳
IMG_20160126_215026.jpg (1.42 MB, 下載次數: 234)
下載附件
2016-1-26 21:52 上傳
UsatConteMot.zip
(42.49 KB, 下載次數: 16)
2016-1-26 21:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
附件一個自己寫的串口1控制電機轉的,下一個:
編碼器數據采集
|
評分
-
查看全部評分
|