
所述BTWS是电动驱动的滑板车用电子控制和驱动系统。信号处理由一个ATmega32的微控制器完成的。它展示了如何强大,灵活和安全的一个如此之快的信号处理可以与AVR器件来完成。
1.工作
在设备上电后,电子产品在待机模式。通过换档手柄成垂直位置时,驱动模式将被激活。该发动机动力和所述设备是平衡的。现在,你可以登上车开走。
2.系统控制
“动态稳定”的原则后BTWS功能的控制。这意味着它们本身车辆结余独立。功能方式是人类的平衡感。代替的内耳,眼睛,肌肉和脑工作的陀螺(传感器的角速率)和一个加速度传感器,微处理器ATMEGA32和高功率电动机一起以稳定的平衡。前进和回归是通过身体前倾靠在椅背到达。被放置在棒的上端摇臂生成的左,右控制信号。
3.电子
电子被大约放置。 100厘米²单层印刷电路板。所有的信号处理和控制由一个ATMEGA32完成。该ATMEGA用他的内部振荡器和他的欠压侦测为确保操作。加速度传感器ADXL311是一个SMD元件女巫在PCB的底面被焊接。
为稳定,不断变化的源信号为一定是按比例的倾斜角变化到大地(大约为5mV /度),并从一个陀螺的角速率信号。用于转向系统中的电位摇杆由模拟输入测量。
单片机产生两个PWM和两个电动马达两个旋转方向的信号。压电声发生器是在PCB上,得到警告和弱电池可以发出信号。
4.软件
调控是在中断服务程序完成。这个函数被调用每10毫秒。
信号采集是非常关键的。为了达到一个良好的稳定是必然的任何时间正确的倾斜角度地球是可用的。
Balancement:
该balancement相对容易;保持棒弯曲在前方后,引擎都在向前的方向上被供电。脚由进料再次身体的主要重点之下推动,达到平衡。
速度控制:
与保持棒的平衡产生的每一个倾斜,并在同一时间的基本速度的一小部分在倾斜方向改变。
速度极限:
如果基本速度已经达到太高,它不会是某个时候任何更可能向balancement,因为电动马达的电压已经达到最高值。为了抵消针对的是,基本的速度被限制在电源电压的2/3。接好balancement总是给出。
操舵
到转向系统中的发动机驱动用不同的电压。
的差的大小由摇杆信号并确定取决于行驶速度。
部分代码:
/ *
-------------------------------------------------- ---------------------------
功能:Algorythmus()
通过倾斜回来限制最高速度,计算行车速度
-------------------------------------------------- ---------------------------
* /
无效Algorythmus()
{
Balance_moment = Angle_Rate * 4 + 5 *(Tilt_ANGLE + Anglecorrection); //计算平衡瞬间
超速= LMAX(0,Drive_sum - Overspeedlimit); //获取超速
如果(超速> 0)
{
如果(MODE ==执行命令)Overspeed_flag = 1;
Overspeed_integral = lmin工(1000,Overspeed_integral +分(500,超速+ 125)); //计算超过速度积分
}
其他
{
Overspeed_flag = 0;
Overspeed_integral = LMAX(0,Overspeed_integral - 100); //计算超过速度积分
}
Anglecorrection =超速/ 200 + Overspeed_integral / 125; //计算角度修正
Drive_sum + = Balance_moment; //计算Drive_sum
// limitting
如果(Drive_sum> Drivesumlimit)Drive_sum = Drivesumlimit;
如果(Drive_sum < - Drivesumlimit)Drive_sum = -Drivesumlimit;
Drivespeed的= Drive_sum / 250 + Balance_moment / 40; //计算驱动速度
}
/ *
-------------------------------------------------- ---------------------------
功能:Signal_Processing()
生成启动条件,计算左/右转向信号
-------------------------------------------------- ---------------------------
* /
无效Signal_Processing()
{
如果(MODE ==待机)//待机模式
{
Drive_A = 0;
Drive_B = 0;
Drivespeed的= 0;
Anglecorrection = 0;
超速= 0;
Overspeed_integral = 0;
Drive_sum = 0;
total_ADXL_GYRO = 0;
Tilt_ANGLE = 0;
Average_Gyro = total_looptime * GYRO_ZERO;
BUF2 = AD_ADXL - ADXL_ZERO + ADXL_offset;
如果(BUF2 == 0)//棍子处于启动位置初始系统运行
{
MODE =运行;
}
}
否则//运行操作
{
Steeringsignal = ROCKER_ZERO - AD_ROCKER; //获取指导信号
//检查死区
如果(Steeringsignal < - ROCKER_DEADBAND)
{
Steeringsignal + = ROCKER_DEADBAND;
}
其他
{
如果(Steeringsignal> ROCKER_DEADBAND)
{
Steeringsignal - = ROCKER_DEADBAND;
}
其他
{
Steeringsignal = 0;
}
}
//计算信号,以减少差速转向以更高的行驶速度
Steeringsignal * = 7;
BUF2 = Drivespeed的;
如果(BUF2 <0)BUF2 * = -1;
BUF2 / = 2;
Steeringsignal / =(BUF2 + 30);
Drive_A = Drivespeed的+ Steeringsignal; //差速转向
Drive_B = Drivespeed的 - Steeringsignal; //差速转向
}
}

点击阅读全文查看更多

