c8051 模块
用于变频器的 c8051 模块
引言
该模块用于控制变频器。我们都知道,为了控制电机旋转频率,所有变频器都有一个“频率设定电位器”接口。不幸的是,所有廉价变频器都无法根据速度电位器精确设定电机速度。本文描述了一种规避此限制的方法(使用 Silabs C8051F300 MCU)。

查看大图模块
背景
这是一个适用于塑料机械的可用模块,用于生产在建筑商店销售的塑料垃圾袋。当我作为一名电气技术人员在这样的行业工作时,为了加快生产线速度,我将此模块连接到机器上。
通过连接此模块,我获得了比以前快高达 2 倍的更新速度。

Using the Code
在代码头文件中,我们设置了 'count
' - 袋子的数量,达到该数量后,开始减速到 'MAX_CAN_READ
' 指示的速度。
为了避免袋子相互撕裂,该模块包含保护值 'LEVEL
'。
'MAX_SPEED
' 限制为 ADC(模数转换器)输出值,该值取决于 MCU 供电电压 (VDD)。C8051F300 供电电压范围为 2.7 至 3.6VDC。
端口 I/O(输入/输出)输出高电压 = VDD – 0.7
要设置 'count
' - 按住 'RED
' 按钮,使用 'UP
' 或 'DOWN
' 选择所需的值。
Timer1
负责更新 UART
输出。Timer0
用于读取开关 1、2 的状态并更新绿色 LED 的状态。ADC 中断更新输出电压和 UART
缓冲区。为了防止断电丢失,计数值存储在闪存地址 '1A00
' 中。
主程序如下所示
void main (void)
{
PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer
// enable)
SYSCLK_Init (); // Initialize system clock to
// 24.5MHz
PORT_Init (); // Initialize crossbar and GPIO
Timer_Init(); // Init Timer2 to generate
ADC0_Init(); // Initialize ADC0
UART0_Init(); // Initialize UART0 for printf's
//-------
YELLOW_LED_STATE = BLINK_OFF;
count = FLASH_ByteRead(0x1A00);
if (count > 25) count = 25;
//-------
PCA_Init();
CR = 1; // Start PCA Counter
EIE1 = 0x0C;
EA = 1; // enable global interrupts
while (1)
{
if (RED == 0)
{
if (YELLOW_LED_STATE == SOLID_OFF) count_blinks=0;
if(count_blinks < count)
{
YELLOW_LED_STATE = BLINK_SLOW;
}
else
{
YELLOW_LED_STATE = BLINK_OFF;
}
}else
{
YELLOW_LED_STATE = SOLID_OFF;
if(count_blinks > count) override_flag = TRUE;
else override_flag = FALSE;
}
if (upd_flag == TRUE)
{
erase_flash_page();
FLASH_ByteWrite(0x1A00, count);
upd_flag = FALSE;
}
}
}
其他文章
请查看我下面列出的其他文章
在那里,您可以找到使用 USB-Toolstick 更新 Silabs MCU 的说明。
历史
- 2010 年 3 月 30 日:初始发布