打印

HC32F005C6PA的PCA配置PWM8位分辨率输出,电流达到155ma!

[复制链接]
8973|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CUIHUANWEN|  楼主 | 2022-3-2 09:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HC32F005C6PA的PCA,按照官方例程P03口配置PWM8位分辨率输出,芯片电流竟然达到155ma,手摸芯片都发热,想请教各位师傅这正常吗?

使用特权

评论回复
沙发
probedog| | 2022-3-2 11:33 | 只看该作者
请教各位大佬这正常吗

使用特权

评论回复
板凳
probedog| | 2022-3-2 11:34 | 只看该作者
肯定不正常

使用特权

评论回复
地板
CUIHUANWEN|  楼主 | 2022-3-2 13:24 | 只看该作者
难道配置错误?请教各位大佬给诊断一下哪里配置的不对

使用特权

评论回复
5
CUIHUANWEN|  楼主 | 2022-3-2 13:25 | 只看该作者
/*************************************************************
*******本项目采用hc32f005c6pa芯片,少引脚够用,低成本,系统启用
*******22.12MHZ内部频率,pwm时钟16分频,输出5.44khzpwm
*******  
*******    qd         p14     //启动信号
*******    24v        p15     //24v开关  
*******    PWM        p03     //pwm输出
*************************************************************/

#include "gpio.c"
#include "pca.c"
#include "ddl.c"
#include "sysctrl.c"
#include "interrupts_hc32f005.c"
#include "uart.c"
#include "bt.c"

#define  E24V_on   Gpio_WriteOutputIO(GpioPort1, GpioPin5, TRUE)       //24v电源开
#define  E24V_off  Gpio_WriteOutputIO(GpioPort1, GpioPin5, FALSE)      //24v电源关
#define  qd_on    Gpio_WriteOutputIO(GpioPort1, GpioPin4, TRUE)       //启动
#define  qd_off   Gpio_WriteOutputIO(GpioPort1, GpioPin4, FALSE)      //关闭
#define  dw0        GpioPin4
#define  dw1        GpioPin1
#define  dw2        GpioPin2
#define  dw3        GpioPin3
#define  dw4        GpioPin4
#define  dw5        GpioPin5
#define  dw6        GpioPin6
#define  dw7        GpioPin2
#define  dw8        GpioPin3
#define  D0   1
#define  D1   80
#define  D2   105
#define  D3   130
#define  D4   155
#define  D5   180
#define  D6   205
#define  D7   230
#define  D8   255

static void Mcu_initcfg(void);
static void App_chip4MHzTo16MHz (void);
static void App_Pca_Pwm_cfg(uint8_t pwith);
static void App_Uart1_cfg(void);
static void App_send(uint8_t xy);

static void App_chip4MHzTo16MHz (void)              //将时钟从RCH4MHz切换至RCH16MHzRCH时钟先将时钟
{                                                   //从RCH切换至RCL32768,设置好频率后再切回RCH                                                     ///同频率的切换,需要先将时钟切换到RCL,
    Sysctrl_SetRCLTrim(SysctrlRclFreq32768);        
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);   //使能内部低速时钟
    Sysctrl_SysClkSwitch(SysctrlClkRCL);            //切换至内部低速时钟
   
    Sysctrl_SetRCHTrim(SysctrlRchFreq22_12MHz);     //< 加载目标频率的RCH的TRIM值
    Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);   //< 使能RCH(默认打开,此处可不需要再次打开)
                                                                                                                                                                                                                //                                                                                                                                                                                                               
    Sysctrl_SysClkSwitch(SysctrlClkRCH);            //< 时钟切换到RCH
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);  //< 关闭RCL时钟   
}

static void Mcu_initcfg(void)
{
                stc_gpio_cfg_t GpioCfg;
       
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);             //打开GPIO时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralPca,TRUE);        //打开PCA时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);         //模式0/2可以不使能
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);             //打开UART1时钟

    DDL_ZERO_STRUCT(GpioCfg);       
                GpioCfg.enDir      = GpioDirIn;          //< 端口方向->输入  
                GpioCfg.enDrv      = GpioDrvL;           //< 端口驱动能力->低驱动能力
                GpioCfg.enPu       = GpioPuEnable;       //< 端口上拉使能
          GpioCfg.enPd       = GpioPdDisable;      //< 端口下拉禁止
                GpioCfg.enOD       = GpioOdDisable;      //< 端口开漏输出禁止
       
                Gpio_Init(GpioPort0, GpioPin1, &GpioCfg);        //1档
                Gpio_Init(GpioPort0, GpioPin2, &GpioCfg);        //2档
    Gpio_Init(GpioPort0, GpioPin3, &GpioCfg);        //PcaPwm
       
                Gpio_Init(GpioPort2, GpioPin3, &GpioCfg);        //3档
                Gpio_Init(GpioPort2, GpioPin4, &GpioCfg);        //4档
                Gpio_Init(GpioPort2, GpioPin5, &GpioCfg);        //5档
                Gpio_Init(GpioPort2, GpioPin6, &GpioCfg); //6档
                Gpio_Init(GpioPort2, GpioPin7, &GpioCfg);        //P27空闲               

                Gpio_Init(GpioPort3, GpioPin1, &GpioCfg);        //P31空闲       
                Gpio_Init(GpioPort3, GpioPin2, &GpioCfg);        //7档
                Gpio_Init(GpioPort3, GpioPin3, &GpioCfg);        //8档
                Gpio_Init(GpioPort3, GpioPin4, &GpioCfg); //0档
                Gpio_Init(GpioPort3, GpioPin5, &GpioCfg);        //P35空闲       
                Gpio_Init(GpioPort3, GpioPin6, &GpioCfg);        //P36空闲               
               
    DDL_ZERO_STRUCT(GpioCfg);               
                GpioCfg.enDir      = GpioDirOut;         //< 端口方向->输出  
                GpioCfg.enDrv      = GpioDrvH;           //< 端口驱动能力->高驱动能力
                GpioCfg.enPu       = GpioPuDisable;      //< 端口上拉无
          GpioCfg.enPd       = GpioPdDisable;      //< 端口下拉无
                GpioCfg.enOD       = GpioOdDisable;      //< 端口开漏输出->禁止               
                Gpio_Init(GpioPort1, GpioPin4, &GpioCfg);       
                Gpio_Init(GpioPort1, GpioPin5, &GpioCfg);
               
}

static void App_Pca_Pwm_cfg(uint8_t pwith)
{
    stc_gpio_cfg_t GpioPcaCfg;       
    stc_pcacfg_t  PcaCfg;

    DDL_ZERO_STRUCT(GpioPcaCfg);        
    DDL_ZERO_STRUCT(PcaCfg);
  
    GpioPcaCfg.enDrv  = GpioDrvL;                 //驱动能力配置->低驱动能力                  
    GpioPcaCfg.enDir  = GpioDirOut;               //端口方向配置->输出
//                GpioPcaCfg.enOD   = GpioOdEnable;                  //端口开漏输出       
    Gpio_Init(GpioPort0, GpioPin3, &GpioPcaCfg);
    Gpio_SetAfMode(GpioPort0, GpioPin3, GpioAf1);
   
    PcaCfg.pca_clksrc = PcaPclkdiv16;
    PcaCfg.pca_cidl   = FALSE;
    PcaCfg.pca_ecom   = PcaEcomEnable;       //允许比较器功能
    PcaCfg.pca_capp   = PcaCappDisable;      //禁止上升沿捕获
    PcaCfg.pca_capn   = PcaCapnDisable;      //禁止下降沿捕获
    PcaCfg.pca_mat    = PcaMatDisable;       //禁止匹配功能
    PcaCfg.pca_tog    = PcaTogDisable;       //禁止翻转控制功能
    PcaCfg.pca_pwm    = PcaPwm8bitEnable;    //使能PWM控制输出

    PcaCfg.pca_ccapl  =pwith;
    PcaCfg.pca_ccaph  =pwith;
    Pca_M3Init(&PcaCfg);
               
          Pca_StartPca(TRUE);       
}

static void App_Uart1_cfg(void)
{
          uint16_t timer=0;

    stc_gpio_cfg_t PcaGpioCfg;                    //PCA引脚配置
    stc_uart_baud_cfg_t setBaud;                  //波特率结构
    stc_bt_cfg_t BtCfg;
    stc_uart_cfg_t  uart_Cfg;       
       
    DDL_ZERO_STRUCT(PcaGpioCfg);       
    DDL_ZERO_STRUCT(setBaud);
    DDL_ZERO_STRUCT(BtCfg);       
    DDL_ZERO_STRUCT(uart_Cfg);               
                                                           
    PcaGpioCfg.enDir = GpioDirOut;
    Gpio_Init(GpioPort3, GpioPin5, &PcaGpioCfg);
    Gpio_SetAfMode(GpioPort3, GpioPin5, GpioAf1);  //配置P35 端口为URART1_TX
                                                         
    PcaGpioCfg.enDir = GpioDirIn;
    Gpio_Init(GpioPort3, GpioPin6, &PcaGpioCfg);
    Gpio_SetAfMode(GpioPort3, GpioPin6, GpioAf1);  //配置P36 端口为URART1_RX
       
    setBaud.bDbaud  = 0u;                          //双倍波特率功能
    setBaud.u32Baud = 9600u;                       //更新波特率位置
    setBaud.enMode  = UartMode3;                   //计算波特率需要模式参数
    setBaud.u32Pclk = Sysctrl_GetPClkFreq();       //获取PCLK
    timer = Uart_SetBaudRate(M0P_UART1, &setBaud); //设置波特率

    BtCfg.enMD = BtMode2;
    BtCfg.enCT = BtTimer;
    Bt_Init(TIM1, &BtCfg);                         //调用basetimer1设置函数产生波特率
    Bt_ARRSet(TIM1,timer);                         //重载值设置
    Bt_Cnt16Set(TIM1,timer);                       //16位计数器初值设置
    Bt_Run(TIM1);
               
    uart_Cfg.enRunMode = UartMode3;               //启用模式3
    Uart_Init(M0P_UART1, &uart_Cfg);               
}
void App_send(uint8_t xy)
{
//                Uart_SetTb8(M0P_UART1,UartEven,xy);           //设置UartEven偶校验,UartOdd奇校验
          Uart_SendDataPoll(M0P_UART1,xy);                    //查询发送
}

/*******************************************************************/
int32_t main(void)
{
    App_chip4MHzTo16MHz();                         //切换至22.12MHZ
                Mcu_initcfg();                                 //MCU初始化配置
//    qd_on;
//    E24V_on;       
          App_Pca_Pwm_cfg(D0);
    App_Uart1_cfg();
    App_send(3);       //送去显示       

    while(1)
                {
                        if(Gpio_GetInputIO(GpioPort3,GpioPin4)==0)
                        {
                                 M0P_PCA->CCAP3H_f.CCAP3 =D0;
                                 qd_off;                               
                                 E24V_off;       
                                 App_send(0);       //送去显示                                       
                        }
                        if(Gpio_GetInputIO(GpioPort0,GpioPin1)==0)
                        {
                                 M0P_PCA->CCAP3H_f.CCAP3 =D1;
                           E24V_on;
                           qd_on;
                                 App_send(1);       //送去显示                               
                        }
                        if(Gpio_GetInputIO(GpioPort0,GpioPin2)==0)
                        {
                           M0P_PCA->CCAP3H_f.CCAP3 =D2;
                           E24V_on;
                           qd_on;
                                 App_send(2);       //送去显示                               
                        }
                        if(Gpio_GetInputIO(GpioPort2,GpioPin3)==0)
                        {
                                 M0P_PCA->CCAP3H_f.CCAP3 =D3;
                                 E24V_on;
                                 qd_on;
                                 App_send(3);       //送去显示
                        }
                        if(Gpio_GetInputIO(GpioPort2,GpioPin4)==0)
                        {
                                 M0P_PCA->CCAP3H_f.CCAP3 =D4;
                           E24V_on;
                           qd_on;
                                 App_send(4);       //送去显示                               
                        }
                        if(Gpio_GetInputIO(GpioPort2,GpioPin5)==0)
                        {
                           M0P_PCA->CCAP3H_f.CCAP3 =D5;
                           E24V_on;
                           qd_on;
                                 App_send(5);       //送去显示                               
                        }
                        if(Gpio_GetInputIO(GpioPort2,GpioPin6)==0)
                        {
                           M0P_PCA->CCAP3H_f.CCAP3 =D6;
                           E24V_on;
                           qd_on;
                                 App_send(6);       //送去显示                               
                        }
                        if(Gpio_GetInputIO(GpioPort3,GpioPin2)==0)
                        {
                           M0P_PCA->CCAP3H_f.CCAP3 =D7;
                           E24V_on;
                           qd_on;
                                 App_send(7);       //送去显示                       
                        }
                        if(Gpio_GetInputIO(GpioPort3,GpioPin3)==0)
                        {
                           M0P_PCA->CCAP3H_f.CCAP3 =D8;
                           E24V_on;
                           qd_on;
                                 App_send(8);       //送去显示                               
                        }
                }
}

使用特权

评论回复
6
tpgf| | 2022-4-1 10:41 | 只看该作者
PCA是什么功能模块啊

使用特权

评论回复
7
heimaojingzhang| | 2022-4-1 10:51 | 只看该作者
需要看看电路图吧

使用特权

评论回复
8
keaibukelian| | 2022-4-1 10:58 | 只看该作者
电流也太大了点

使用特权

评论回复
9
labasi| | 2022-4-1 11:17 | 只看该作者
是不是外围电路有问题啊

使用特权

评论回复
10
paotangsan| | 2022-4-1 11:23 | 只看该作者
看程序看不出问题来

使用特权

评论回复
11
renzheshengui| | 2022-4-1 11:30 | 只看该作者
有木有可能烧掉了啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

59

帖子

0

粉丝