XHB7906021 发表于 2026-2-4 09:19:16

AI8G1K08A有没有PWM可用,从引脚示意上看不出,选型 上说有

AI8G1K08A SOP-8的有没有PWM可用,从引脚示意上看不出,选型上说有,烧录APP示例程序很少,且没有功能说明。小白真搞不懂!我想用AI8G1K08A SOP-8 的ADC值来控制改变PWM输出频率,如何搞?哪有类似的例程?请多指点。

AI芯 发表于 2026-2-4 10:17:57



数据手册:https://www.stcaimcu.com/data/download/Datasheet/AI8.pdf

DebugLab 发表于 2026-2-4 11:42:17

CCON=0x00;                                //设置PCA控制寄存器
        CMOD=0x80;                                //设置空闲模式下PCA停止计数,禁止PCA计数器溢出中断,设置PCA时钟为系统时钟/12(900Hz)
        CL=0x00;                                //设置PCA计数器
        CH=0x00;                                //设置PCA计数器
        CCAPM0=PWM0;                        //使能PCA模块0PWM功能
        PCA_PWM0=0xc0;                        //设置PCA模块0输出10位PWM
        CCAPM1=PWM1;                        //使能PCA模块1PWM功能
        PCA_PWM1=0xc0;                        //设置PCA模块1输出10位PWM
        CCAPM2=PWM2;                        //使能PCA模块2PWM功能
        PCA_PWM2=0xc0;                        //设置PCA模块2输出10位PWM
        CR=1;                                        //启动PCAvoid PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
{
        unsigned char temp_l,temp_h,temp;
       
        temp_l=pwm_0&0x00ff;                //读pwm_0低8位赋值给temp_l
        temp_h=(pwm_0&0x0300)>>4;        //读pwm_0高2位,移动到XCCAP0H(PCA_PWM0)位置,赋值给temp_h
        temp=PCA_PWM0&0xcd;                        //读PCA_PWM0,XCCAP2H(PCA_PWM0)、EPC0H(PCA_PWM0)清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_0==0x03ff)                        //如果pwm_0最大
                temp_h|=0x02;                        //设置EPC0H(PCA_PWM0)为1
        PCA_PWM0=temp_h;                        //写PCA_PWM0(先写高2位)
        CCAP0H=temp_l;                                //写CCAP0H(再写低8位)
       
        temp_l=pwm_1&0x00ff;                //读pwm_1低8位赋值给temp_l
        temp_h=(pwm_1&0x0300)>>4;        //读pwm_1高2位,移动到XCCAP1H(PCA_PWM1)位置,赋值给temp_h
        temp=PCA_PWM1&0xcd;                        //读PCA_PWM1,XCCAP1H(PCA_PWM2)、EPC1H(PCA_PWM1)清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_1==0x03ff)                        //如果pwm_1最大
                temp_h|=0x02;                        //设置EPC1H(PCA_PWM1)为1
        PCA_PWM1=temp_h;                        //写PCA_PWM1(先写高2位)
        CCAP1H=temp_l;                                //写CCAP1H(再写低8位)
       
        temp_l=pwm_2&0x00ff;                //读pwm_2低8位赋值给temp_l
        temp_h=(pwm_2&0x0300)>>4;        //读pwm_2高2位,移动到XCCAP2H(PCA_PWM2)位置,赋值给temp_h
        temp=PCA_PWM2&0xcd;                        //读PCA_PWM2,XCCAP2H(PCA_PWM2)、EPC2H(PCA_PWM2)清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_2==0x03ff)                        //如果pwm_2最大
                temp_h|=0x02;                        //设置EPC2H(PCA_PWM2)为1
        PCA_PWM2=temp_h;                        //写PCA_PWM2(先写高2位)
        CCAP2H=temp_l;                                //写CCAP2H(再写低8位)
}以上程序供参考,注意PCA不能连续变频

vb2002 发表于 2026-2-5 22:21:15

PCA,或者定时器输出口也可以用

clamb 发表于 2026-2-6 08:42:05

AI8G1K08A必须有PWM(PCA0/PCA1/PCA2)啊,我就用过ADC读NTC温度然后PWM来调节风扇转速散热,但我是变占空比不是变频。
可以参照AI8G**PCA的程序,8G1K08A仅输出引脚不一样。

daqingpanfujie 发表于 2026-3-23 11:16:14

clamb 发表于 2026-2-6 08:42
AI8G1K08A必须有PWM(PCA0/PCA1/PCA2)啊,我就用过ADC读NTC温度然后PWM来调节风扇转速散热,但我是变占空 ...

谢谢,能给个代码吗?想做一个这样的控制电路。

clamb 发表于 2026-4-24 12:32:22

daqingpanfujie 发表于 2026-3-23 11:16
谢谢,能给个代码吗?想做一个这样的控制电路。
www.stcaimcu.com/thread-6506-1-1.html

daqingpanfujie 发表于 2026-4-25 07:53:49

clamb 发表于 2026-4-24 12:32
www.stcaimcu.com/thread-6506-1-1.html

硬件我还行。
页: [1]
查看完整版本: AI8G1K08A有没有PWM可用,从引脚示意上看不出,选型 上说有