SYDTEK系列芯片低速PWM的三个模式和用法
SYD8801的pwm只能夠掛在32.768Khz上,所以速度不是很快,但是他依舊支持三種模式,SYD8811和SYD8821就都有高速的PWM,掛在MCU的時鐘上,這里以SYD8801作為說明,介紹三種PWM
SYD8801 PWM使用說明
Syd8801的PWM模塊支持三種模式:閃光、PWM、呼吸燈,他們的時序如下:
使用內部定時器的話必須經過校準,對于外設驅動代碼使用LPOCaliWaitUS函數進行校準,如果代碼中包含了《syd_ble_keil.lib》庫,則調用LPOCalibration函數進行校準。使用內部32.768Khz時鐘的PWM程序如下:
static voidtimer2_callback(void);
uint8_t j=0;
int main()
{
uint8_t i=0;PWM_PARAMETER pwm_parameter;if(LPOCaliWaitUS(1000)){ //這是內部RC32k晶振的校準函數 for(i=0;i<6;i++){led_turn(LEDALL);delay_ms(300);}}else{for(i=0;i<20;i++){led_turn(LEDALL);delay_ms(300);}}//Flash modepwm_parameter.MODE=flash_mode;pwm_parameter.T1=0x10; //16 * 1/32=0.5s 實測0.768563250pwm_parameter.T2=0x20; //32 * 1/32=1s 實測1.585201375pwm_parameter.T3=0x0000;pwm_parameter.N1=0x80; pwm_parameter.N2=0x80;pwm_enable(PWM_0,pwm_parameter);
//Breath mode timing pwm_parameter.MODE=breath_mode;pwm_parameter.BR_TH_MAX=0x28; //255/2=125.5mspwm_parameter.BR_TH_MIN=0x02; //2/2=1mspwm_parameter.T4=0x28; //255/2=125.5ms pwm_parameter.BR_SP=0x0f; //255/32=7.96876mspwm_enable(PWM_1,pwm_parameter);
//PWM mode timingpwm_parameter.MODE=pwm_mode;pwm_parameter.PWM_M=0xff; pwm_parameter.PWM_N=0xCF;pwm_enable(PWM_2,pwm_parameter);
timer_2_enable(0x7D00,timer2_callback); // 32000 /31.25 ms = 976.5625 mswhile(1){if(j>180){ //最晚三分鐘必須再校準一次j=0;LPOCaliWaitUS(1000);}}}
static voidtimer2_callback(void)
{
j++;}
這里要注意的是:這是因為現在使用的是內部的時鐘基準,沒有校準過的內部的時鐘存在著很大的誤差,所以調用LPOCaliWaitUS函數校準,并且3分鐘必須校準一次。
如果這里使用32.768Khz的外部晶振則不需要校準,下面是使用外部32.768Khz的程序:
int main()
{
uint8_tdata;PWM_PARAMETERpwm_parameter;BBRFWrite(0x7F,0x00); // switch Bank A BBRFRead(0x03,&data); //讀回要配置的寄存器BBRFWrite(0x03,data | 0x04); //置位B_M2_32KXtal_EN,打開外部晶振BBRFWrite(0x7F,0x02); // switch Bank CBBRFRead(0x00,&data); BBRFWrite(0x00,data | 0x01); //置位RG_CLK32K_SEL,使定時器使用外部32k晶振//Flashmodepwm_parameter.MODE=flash_mode;pwm_parameter.T1=0x10; //16 * 1/32=0.5spwm_parameter.T2=0x20; //32 * 1/32=1spwm_parameter.T3=0x0000;pwm_parameter.N1=0x80; //永久重復,沒有T3pwm_parameter.N2=0x80; //永久重復pwm_enable(PWM_0,pwm_parameter);
//Breathmode timing pwm_parameter.MODE=breath_mode;pwm_parameter.BR_TH_MAX=0x28; //40/2=20mspwm_parameter.BR_TH_MIN=0x0A; //10/2=1mspwm_parameter.T4=0x28; //40/2=20mspwm_parameter.BR_SP=0x0f; //15/32ms=0.46875mspwm_enable(PWM_1,pwm_parameter);
//PWMmode timingpwm_parameter.MODE=pwm_mode;pwm_parameter.PWM_M=0xff; //255/32ms=7.96875mspwm_parameter.PWM_N=0xCF; //207/32ms=6.46875mspwm_enable(PWM_2,pwm_parameter);
while(1){}}
最后注意一點:PWM和定時器是獨立的單元,也就是說SYD8801有三路定時器,三路PWM
總結
以上是生活随笔為你收集整理的SYDTEK系列芯片低速PWM的三个模式和用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kay】MySQL必会常用函数
- 下一篇: java socket通信 客户端_Ja