咨询pwma编码器p2口设置脉冲数的程序
pwma相关库函数中,有个pwma编码器p2口设置脉冲数的程序,我修改了用p1口,但是计数的设置脉冲数中断没有反应,@梁工,@陈工,能否指点一下 void PWMA_config(void){
u8 ps;
P_SW2 |= 0x80; //SFR enable
P2M1 = 0x00;
P2M0 = 0x00;
PWMA_PSCR = 0; // Ô¤·ÖƵ¼Ä´æÆ÷, ·ÖƵ Fck_cnt = Fck_psc/(PSCR+1), ±ßÑØ¶ÔÆëPWMƵÂÊ = SYSclk/((PSCR+1)*(AAR+1)), ÖÐÑë¶ÔÆëPWMƵÂÊ = SYSclk/((PSCR+1)*(AAR+1)*2).
PWMA_DTR= 0; // ËÀÇøÊ±¼äÅäÖÃ, n=0~127: DTR= n T, 0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
// 0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T, 0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
PWMA_ARR = 0xffff; // ×Ô¶¯ÖØ×°ÔؼĴæÆ÷,¿ØÖÆPWMÖÜÆÚ
PWMA_CNTR = 0; //ÇåÁã±àÂëÆ÷¼ÆÊýÆ÷Öµ
PWMA_SR1 = 0;
PWMA_SR2 = 0;
PWMA_PS = 0;
PWMA_ENO = 0; //IO½ûÖ¹Êä³öPWM,bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,bit3: ENO2N,bit2: ENO2P,bit1: ENO1N,bit0: ENO1P
ps = 0;
PWMA_ISR_En = 0;
PWMA_CCMR1= 0x01+(10<<4); // ͨµÀ1ģʽÅäÖÃ, ÅäÖóÉÊäÈëͨµÀ, 0~15¶ÔÓ¦ÊäÈëÂ˲¨Ê±ÖÓÊý: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
PWMA_CCMR2= 0x01+(10<<4); // ͨµÀ2ģʽÅäÖÃ, ÅäÖóÉÊäÈëͨµÀ, 0~15¶ÔÓ¦ÊäÈëÂ˲¨Ê±ÖÓÊý: 1 2 4 8 12 16 24 32 48 64 80 96 128 160 192 256
PWMA_SMCR = 2; // ±àÂëÆ÷ģʽ, ģʽ1»òģʽ2: ÿ¸öÂö³åÁ½¸ö±ßÑØ¼Ó¼õ2. ģʽ3: ÿ¸öÂö³åËĸö±ßÑØ¼Ó¼õ4.
PWMA_CCER1= 0x55; // ÅäÖÃͨµÀÊäÈëʹÄܺͼ«ÐÔ, ÔÊÐíÊäÈë, ϽµÑØ
ps |= 0; // Ñ¡ÔñIO, 0:Ñ¡ÔñP1.0 P1.1, 1:Ñ¡ÔñP2.0 P2.1, 2:Ñ¡ÔñP6.0 P6.1,
ps |= (0<<2); // Ñ¡ÔñIO, 0:Ñ¡ÔñP1.2 P1.3, 1:Ñ¡ÔñP2.2 P2.3, 2:Ñ¡ÔñP6.2 P6.3,
PWMA_ISR_En|= 0x02; // ʹÄÜÖжÏ
PWMA_CCR3= 100; // ¼ÆÊýÆ÷±È½ÏÖµ(ÉèÖÃÒ»¸öÂö³åÊý), Æ¥Åäʱ¿Ì
PWMA_CCMR3= (3<<4); // ͨµÀ1ģʽÅäÖÃ, ½ûÖ¹Ô¤×°ÔØ. 0: ÎÞÊä³ö, 1:Æ¥ÅäʱÊä³ö¸ß, 2:Æ¥ÅäʱÊä³öµÍ, 3:Æ¥ÅäʱÊä³ö·×ª.
PWMA_CCER2= 0x01; // ²¶»ñ/±È½ÏʹÄܼĴæÆ÷2
PWMA_PS = ps; // Ñ¡ÔñIO
PWMA_ISR_En|= 0x08; // ʹÄÜÖжÏ
PWMA_IER = PWMA_ISR_En; //ÉèÖÃÔÊÐíͨµÀ1~4Öжϴ¦Àí
PWMA_CR1 = 0x01; // ʹÄܼÆÊýÆ÷, ÔÊÐí×Ô¶¯ÖØ×°ÔؼĴæÆ÷»º³å, ±ßÑØ¶ÔÆëģʽ, ÏòÉϼÆÊý,bit7=1:д×Ô¶¯ÖØ×°ÔؼĴæÆ÷»º³å(±¾ÖÜÆÚ²»»á±»´òÈÅ), =0:Ö±½Óд×Ô¶¯ÖØ×°ÔؼĴæÆ÷±¾(ÖÜÆÚ¿ÉÄÜ»áÂÒµô)
} yangtao123 发表于 2024-7-3 08:57
void PWMA_config(void)
{
u8 ps;
这个是pwm的初始化程序,用的p1口 从P2通道改到P1通道只要修改PWMx_PS寄存器
原先P2通道的功能测试正常后只修改PWMx_PS寄存器,其它不用改。 乘风飞扬 发表于 2024-7-3 09:20
从P2通道改到P1通道只要修改PWMx_PS寄存器
原先P2通道的功能测试正常后只修改PWMx_PS寄存器,其它不用改。 ...
是只改了io的配置,转动编码器有数据出来这是正常的,我遇到的问题是设置脉冲数的这个一直搞不定, 串口怎么转都收不到这个if(B_OK)
{
B_OK = 0;
PrintString1("设置脉冲数到!\r\n");
}
本帖最后由 STCAI-32位8051 于 2024-7-3 13:41 编辑
先看看范例程序以及下面的技术贴会不会有帮助
【新提醒】STC32G-高级PWM范例程序下载 - BLDC/144MHz-PWM-硬件移相/45路PWM+3路CCP/7组不同周期的PWM/DAC 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1778
yangtao123 发表于 2024-7-3 09:58
是只改了io的配置,转动编码器有数据出来这是正常的,我遇到的问题是设置脉冲数的这个一直搞不定, 串 ...
转到100也收不到吗? 可以了,100的时候要转慢点,就能收到了
页:
[1]