yangtao123 发表于 2024-7-3 08:55:28

咨询pwma编码器p2口设置脉冲数的程序

pwma相关库函数中,有个pwma编码器p2口设置脉冲数的程序,我修改了用p1口,但是计数的设置脉冲数中断没有反应,@梁工,@陈工,能否指点一下

yangtao123 发表于 2024-7-3 08:57:57

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:58:46

yangtao123 发表于 2024-7-3 08:57
void PWMA_config(void)
{
        u8        ps;


这个是pwm的初始化程序,用的p1口

乘风飞扬 发表于 2024-7-3 09:20:15

从P2通道改到P1通道只要修改PWMx_PS寄存器

原先P2通道的功能测试正常后只修改PWMx_PS寄存器,其它不用改。

yangtao123 发表于 2024-7-3 09:58:44

乘风飞扬 发表于 2024-7-3 09:20
从P2通道改到P1通道只要修改PWMx_PS寄存器

原先P2通道的功能测试正常后只修改PWMx_PS寄存器,其它不用改。 ...



是只改了io的配置,转动编码器有数据出来这是正常的,我遇到的问题是设置脉冲数的这个一直搞不定,        串口怎么转都收不到这个if(B_OK)


                {
                        B_OK = 0;
                        PrintString1("设置脉冲数到!\r\n");
                }

AI-32位8051 发表于 2024-7-3 13:40:06

本帖最后由 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

电子DIY小家 发表于 2024-7-3 13:47:17

yangtao123 发表于 2024-7-3 09:58
是只改了io的配置,转动编码器有数据出来这是正常的,我遇到的问题是设置脉冲数的这个一直搞不定,        串 ...

转到100也收不到吗?

yangtao123 发表于 2024-7-3 14:00:29

可以了,100的时候要转慢点,就能收到了
页: [1]
查看完整版本: 咨询pwma编码器p2口设置脉冲数的程序