OdB74qDtKA

Brushless ESC PWM signal generator

 
Overview

# 说明(已打板验证)
**免责声明:开源工程无法担责哈,无刷电机转的快,自己多测试,注意安全。**
用STC8G1K08A芯片(sop8封装)输出适用于无刷电调的PWM信号(芯片1.3元+电位器0.3元+阻容=2元)。(此芯片也有dip8封装,大概1.8元一个)

信号周期 2.56 毫秒,频率 390.625 Hz。

高电平时间默认 0.9-2.0 毫秒,步进2.5微秒。高电平时间范围可修改参数调整。

当电位器差不多位于前10%时输出0.9毫秒,差不多位于最后10%时,输出2.0毫秒,在10%-90%之间线性变化(见下面修改参数部分的配图)。同样可以修改代码调整。

*输出波形*
![sbq.jpg]## 关于代码
代码是用sdcc编译的,不是keil。

考虑到有人要改参数,我给整了个自带sdcc的包,点一下就能编译,见附件。
### BugFix日志
2022/9/28:(电路)添加C2电容,以免电磁干扰引起电压波动,而错误的启动电机,提高稳定性。

2022/9/28:(代码)修正了错误的IO口配置,此错误将导致PWM输出口输出能力不足。

2022/9/27:(代码)修正了一个变量溢出的错误,此错误将导致输出不正确的占空比。

## 修改参数
通过网络可以了解到,控制无刷电调的模块输出的高电平信号是0.9-2.0毫秒。总的信号周期(高电平加低电平)一般在2毫秒到20毫秒之间,频率就是50Hz-500Hz。

首先,单片机在工作时,它所知道的信息是通过模数转化(ADC) 读取到电位器输出的电压值,这个数是10位精度,范围0-1023(2的10次方=1024)。

其次,单片机的输出是PWM信号,而电调只关心这个信号的高电平长度。高电平信号长度在1.0-2.0毫秒之间,也就是1000-2000微秒。

所以,给出6个参数可以配置的参数,(实际上是四个,剩下两个由这四个算出),(参数名字有点词不达意哈,随便取的,看配图就行)
```
PWM_HIGH_TIME_MIN,//输出高电平的最小长度,单位微秒
PWM_HIGH_TIME_MAX,//输出高电平的最大长度,单位微秒
PWM_HIGH_TIME_DLETA,//上面两个值的差
ADC_OFF_NUMBER,//当adc读到的值小于此值时,输出高电平取最小长度
ADC_ON_NUMBER,//当adc读到的值大于此值时,输出高电平取最大长度
ADC_ON_OFF_DELTA_NUMBER//上面两个值的差
```
由这六个参数(实际上是四个)所给出的输出pwm的高电平时间与adc读到的值(电位器的位置/电压)的关系如图所示:

![003.jpg]
所以修改这6个参数就可以了,那么在哪里改?

在一个名为 **config.h** 文件里改:
```c
#ifndef __CONFIG_H__
#define __CONFIG_H__
/****************************用户配置****************************/

/********* PWM *********/
#define PWM_HIGH_TIME_MIN 900
#define PWM_HIGH_TIME_MAX 2000 //800 < PWM_HIGH_TIME_MIN < PWM_HIGH_TIME_MAX < 2300,
#define PWM_HIGH_TIME_DLETA 1100 //PWM_HIGH_TIME_DLETA=PWM_HIGH_TIME_MAX-PWM_HIGH_TIME_MIN

/********* ADC *********/
#define ADC_OFF_NUMBER 100
#define ADC_ON_NUMBER 900 //30 < ADC_OFF_NUMBER < ADC_ON_NUMBER < 1000,
#define ADC_ON_OFF_DELTA_NUMBER 800 //ADC_ON_OFF_DELTA_NUMBER=ADC_ON_NUMBER-ADC_OFF_NUMBER


/******* PRINTF *******/
// 启用/禁用 串口打印,建议串口输出仅作为调试使用,在正常使用过程中当禁用
// 改成 0 以 禁用,改成 1 以 启用
#define IS_PRINTF_ENABLE 0 //禁止一直打印内容

/****** 上电休眠 ******/
// 单位 毫秒,范围 0-65535
#define ON_POWER_DELAY_TIME 300 //上电不立马启动,等稳定后再输出pwm

#endif
```

改完后大概保证下面四行关系成立就行。

```
800 < PWM_HIGH_TIME_MIN < PWM_HIGH_TIME_MAX < 2500,
PWM_HIGH_TIME_DLETA=PWM_HIGH_TIME_MAX-PWM_HIGH_TIME_MIN
30 < ADC_OFF_NUMBER < ADC_ON_NUMBER < 1000,
ADC_ON_OFF_DELTA_NUMBER=ADC_ON_NUMBER-ADC_OFF_NUMBER
```

### 下载选项
注意:IRC频率一定要选择 **12MHz**

**没有自动复位电路,点击下载后还需断开供电(推荐拔掉GND,再接上去),芯片重新上电后才开始下载**
![xiazai.jpg]### 附件说明

①main.hex是固件。

②src.zip是源代码,适合自己能安装sdcc,会编译代码的同学。config.h就在目录里哈

③one_click_compile.zip是自带sdcc的源代码,点两下(不是one click哈)里面的build.bat他就帮你编译好main.hex。配置文件在one_click_compileinsrcconfig.h。
build.bat的输出差不多是这样的,看到main.hex就行。
![image.png]
参考设计图片
×
 
 
Search Datasheet?

Supported by EEWorld Datasheet

Forum More
Update:2025-06-20 05:26:10
  • I feel sorry for a certain treasure technology seller
  • About the serial port problem in TCC7901_bsp2.2
  • Insert node in interrupt service routine
  • Interface application design of USB interface device PDIUSBD12
  • Newcomer (self-introduction)
  • About STM32F102/103 USB module and USB library function

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
community

Robot
development
community

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号