找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1977|回复: 12
打印 上一主题 下一主题
收起左侧

关于8系PWM输出设置 STC8H1K08单片机

[复制链接]
跳转到指定楼层
楼主
选用的单片机芯片8H1K08,只有定时器0,1,2 。 用了两路串口分别是57600,9600.一个接屏幕,一个接读卡器。占用两个定时器,最后一个定时器用了计时和别的功能,现在还需要一路IO口输出PWM功能,周期100us ,10us~20us可调,只能用硬件了。对着例程弄了一天了。没输出。IO我已经切换了,下面是我改的。还有时钟也没弄好。
void TxPulse()
{
    P_SW2 = 0x80;
    PWMA_CCER2 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR4 = 0x60;                          //设置CC为PWMA输出模式
    PWMA_CCER2 = 0x10;                          //使能CC通道
    PWMA_CCR4 = 100;                            //设置占空比时间
    PWMA_ARR = 500;                             //设置周期时间
    PWMA_ENO = 0x80;                            //使能PWM4N端口输出
    PWMA_BKR = 0x80;                            //使能主输出
    PWMA_CR1 = 0x01;                            //开始计时

}



用的是PWM4N_2   P3.3

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:427868 发表于 2023-6-15 23:02 | 只看该作者
我也正在试验它,也是P3.3输出,我觉得例程是PWM1P脚输出的,要用PWMA通道4在P3.3输出,还需定义输出脚才行,所以在例程的基础上增加了:PWMA_PS = 0xC0;  //使能PWM4N端口选在P3.3(14脚),甚至还要改定义PWMA_CCER4和PWMA_CCMR4,但是否可以输出,还没有测试。
void        pwmout(u16 zhankong)       
{
        P_SW2 |= 0x80;                                                                                                //使能XFR
        PWMA_CCER1 = 0x00;                    //写CCMRx前必须先清零CCERx关闭通道
        PWMA_CCMR1 = 0x60;                    //设置CC1为PWMA输出模式
        PWMA_CCER1 = 0x01;                    //使能CC1通道
       
        PWMA_CCR1 = zhankong;               //设置占空比时间
        PWMA_ARR = 99;                         //设置周期时间24MHZ时,PWM输出120KHZ
        PWMA_ENO = 0x80;                     //使能PWM4N端口输出
        PWMA_PS = 0xC0;                       //使能PWM4N端口选在P3.3(14脚)
        PWMA_BKR = 0x80;                      //使能主输出
        PWMA_CR1 = 0x01;                      //开始计时
}
回复

使用道具 举报

板凳
ID:60656 发表于 2023-6-21 22:47 | 只看该作者
io要配置推挽输出
回复

使用道具 举报

地板
ID:1085649 发表于 2023-6-24 02:55 | 只看该作者
有些型号默认输出高阻态,不知道你设置没
还需要用辅助寄存器切换IO口
可以参考PCA相关例程
回复

使用道具 举报

5#
ID:427868 发表于 2023-6-25 18:33 | 只看该作者
是设置的问题,以下我测试输出正常,占空比符合设置预期。输出端口也是P3.3

include<stc8h.h>        //STC8H1K08        TSSOP20
sbit out = P3^3;      //电机PWM信号输出
/*************************主函数**********************************/       
void main()
{
   P0M0 = 0x00; P0M1 = 0x00;        P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;        P3M0 = 0x08; P3M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;

    P_SW2 = 0x80;
    PWMB_CCER2 = 0x00;              //写CCMRx前必须先清零CCERx关闭通道
    PWMB_CCMR3= 0x60;               //设置CC7为PWMA输出模式
    PWMB_CCER2 = 0x01;              //使能CC7通道
    PWMB_CCR7 = 5;                    //设置占空比时间
    PWMB_ARR = 999;                   //设置周期时间
    PWMB_ENO = 0x10;                //使能PWM7端口输出
    PWMB_PS = 0x10;                         //PWM7在P3.3输出
    PWMB_BKR = 0x80;                //使能主输出
    PWMB_CR1 = 0x01;                //开始计时
    while (1);
}
回复

使用道具 举报

6#
ID:1034262 发表于 2023-6-25 19:57 | 只看该作者
建议先测试STC官方的例程,然后再修改移植。
回复

使用道具 举报

7#
ID:1088441 发表于 2023-7-14 09:39 | 只看该作者
刘佑红 发表于 2023-6-25 18:33
是设置的问题,以下我测试输出正常,占空比符合设置预期。输出端口也是P3.3

include        //STC8H1K08        TSSOP2 ...

为什么我用这段代码在keil上进行软件仿真时P3.3一直输出的是高电平呢
回复

使用道具 举报

8#
ID:1088441 发表于 2023-7-14 09:42 | 只看该作者
楼主搞定了吗,我用P5.4想输出PWM也一直输出不了
回复

使用道具 举报

9#
ID:427868 发表于 2023-7-17 21:02 | 只看该作者
     刚测,正常输出可调PWM,ARR和CCR采用预装载方式,在使用中可随时改变,寄存器初始化可参照设置。采用的STC8H1K16,P2.7脚输出(PWM4N)
        P_SW2 |= 0x80;                                //开启P_SW2寄存器1000 0000
        PWMA_CCER2 = 0x00;                 //写CCMRx前必须先清零CCERx关闭通道
        PWMA_CCMR4 = 0x68;                 //设置CC4为PWM输出模式,开启预装载CCR4 0110 1000
        //PWMA_CCMR4 = 0x78;             //设置CC4为PWM输出模式,开启预装载CCR4 0111 1000(负极性输出)
        PWMA_CCER2 = 0x40;                 //0100 0000单独使能CC4N通道(不开CC4P),输出高电平
        PWMA_CCR4 = 2500;                  //设置占空比时间
        PWMA_ARR = 5000;                   //设置周期时间
        PWMA_PS = 0x40;                    //PWM4N在P2.7输出0100 0000
        PWMA_ENO = 0x80;                   //使能PWM4N端口输出1000 0000
        PWMA_BKR = 0x80;                   //使能主输出1000 0000
        PWMA_CR1 = 0x81;                   //开始计时 1000 0001开启自动预装载PWMA_ARR
回复

使用道具 举报

10#
ID:1088441 发表于 2023-7-18 09:29 | 只看该作者
刘佑红 发表于 2023-7-17 21:02
刚测,正常输出可调PWM,ARR和CCR采用预装载方式,在使用中可随时改变,寄存器初始化可参照设置。采用 ...

请问你的频率设置的多少呢,为什么我用你这个改一下在P54口输出就没有效果呢
回复

使用道具 举报

11#
ID:427868 发表于 2023-7-18 10:35 | 只看该作者
Aresxiaogui 发表于 2023-7-18 09:29
请问你的频率设置的多少呢,为什么我用你这个改一下在P54口输出就没有效果呢

我的PWM输出频率范围是1-25KHZ(由外部电压改变频率),系统是12MHZ,PWM时钟不分频。STC8H1K08的P5.4是PWM6口输出,相应的寄存器需作对应修改。
回复

使用道具 举报

12#
ID:427868 发表于 2023-7-18 11:45 | 只看该作者
     STC8H单片机PWM的寄存器太多,且有些寄存器的功能看着比较相似,手册介绍的也不太清楚,难以区别,设置起来非常困难,我前前后后阅读器多次并反复设置测试,PWM才正常,但其捕捉功能我现在还没明白。
       楼主的PWM没有输出,我在STC8H1K164N已输出正常,频率和占空比按照预设要求输出,经对比发现对寄存器的设置有以下不同:





1. PWMA_CCMR4。 楼主设置 0x60=0110 0000,我设置的是0x68=0110 1000,我与楼主相比是多开启了占空比数值预装载功能。官方的例程仅是输出PWM测试,不改变占空比CCR和计数周期ARR的数值,所以官方例程没有开启占空比和计数周期预装载功能,在实际应用时大都需要是是调整占空比和频率,更改预装载值,故大多数情况下是开启。
2. PWMA_CCER2。楼主设置0x10=0001 0000,使B4位的CC4E=1,开启的是4P比较功能,我设置的是0x40=0100 0000,使B6位的CC4NE=1,开启的是4N比较功能。
我们开启的是4N功能,故PWMA_CCER2应该设置为0x40才行。
3.楼主没有设置PWMA_PS,即PWMA_PS是复位值0x00,其设置为4N在P1.7脚输出;我设置PWMA_PS = 0x40=0100 0000,设置4N在P2.7脚输出。楼主的是STC8H1K08,4N欲在P3.3输出,设置PWMA_PS= 0xC0才行(11000000)。
4.PWMA_CR1。区别同1,我是开启了ARR预装载功能。

回复

使用道具 举报

13#
ID:645889 发表于 2023-8-5 08:31 | 只看该作者
刘佑红 发表于 2023-7-18 11:45
STC8H单片机PWM的寄存器太多,且有些寄存器的功能看着比较相似,手册介绍的也不太清楚,难以区别,设 ...

说得很详细,刚好有个项目要用,参考下,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表