振动按摩检查电池充放电
大家好
公司上一个新项目,用蓝牙控制马达按摩,现请教几个问题:
1)我仔细比较,发现用keyfob的project改比较合适。是否有更合适的project。
2)此按摩器要充电。因此只选择cc2541(2540好像不支持usb)。能支持usb并充电。
3)要用1个port端口来检查电池充放电。当电池电量低于多少就报警,充电就显示,充满就提示什么的。
没找到在哪块程序。
谢谢
祝好
lincoln
cc2540带usb接口
锂电池充电可以找德州仪器专用充电管理芯片
电池放电电量检测一般用的是芯片内部ADC检测,充电需要加入充电芯片
你好!
我在硬件设计上用 me4054来管理充放电。用xc6206来把4.2v降成3.2v为cc2451供电。留p0-0(你讲adc)的来检查充放电。
我现在keyfob这个工程文件来改,控制马达按摩振动。
电池检测是否是改battservice.c,怎么改呀。
1)不知怎么检测电池容量。
2)电池充放电是否跟cc2541固件无关。有关的话,改哪里来决定充放电。
3)是否当电量不够,就置p0-0为1报警要求充电,或当充满亮灯。当电量够时就让p0_0为0.,不亮灯,不报警。
现在一头雾水。谢谢
lincoln
你好,
keyfob,peripheral工程都适合你的应用。
CC2540支持USB,CC2541不支持。
你可以用ADC直接采集电压即可。
你好, 我看2541好像能用usb充电呀。
我用keyfob改了。马达代替了蜂鸣器。把控制马达的三极管的p1_6置1,让三极管导通,但马达并没转动?是否还有哪些地方修改。请赐教。
谢谢
lincoln
急,有人能帮下吗?谢了。
你好,
你的描述过于抽象。
具体一点,你确认P1_6有输出吗?电平是高电平还是无无反应?
你的软件是如何处理的,有驱动P1.6管脚吗?
你好,kqian0327
帮我看下,
如下:
1)
两个马达,1个p1_6,1个p1_2控制。都不转动。
void massagerInit(void)
{
P1DIR |= 0x44; // P1.6 ,p1.2 massager
P1SEL |= 0x44; // P1.6 ,p1.2 massager
}
void massagerStart1(void)
{
buzzerInit();
P1_2 = 1;
P1_6 = 1;
}
void massagerStop(void)
{
P1SEL &= ~0x44;
P1_6 = 0;
P1_2 = 0;// breast massager
}
按按键时调用massagerStart1,都没反应
2)
仿防丢蜂鸣器响,p1_6的会振动,p1_2的不振动。为什么振动跟时钟定时器有关系,还有在广播时,振动不规则抖动,广播停了就振动正常。不找不到原因。
我想当按键开机时,如果连接上app,按摩器停止广播了。如果不连接app,接着按按键就是振动,这个时候我需要停止广播,否则振动不规则。我只停止广播,不想关机。否则不会振动。
void massagerInit(void)
{
PERCFG |= 0x20; // Timer 3 Alternate location 2
P1DIR |= 0x44; // P1.6 ,p1.2massager
P1SEL |= 0x44; // P1.6 ,p1.2 massager
T3CTL &= ~0x10; // Stop timer 3 (if it was running)
T3CTL |= 0x04; // Clear timer 3
T3CTL &= ~0x08; // Disable Timer 3 overflow interrupts
T3CTL |= 0x03; // Timer 3 mode = 3 - Up/Down
T3CCTL0 &= ~0x40; // Disable channel 0 interrupts
T3CCTL0 |= 0x04; // Ch0 mode = compare
T3CCTL0 |= 0x10; // Ch0 output compare mode = toggle on compare
}
void massagerStart1(uint16 frequency)
{
buzzerInit();
uint8 prescaler = 0;
// Get current Timer tick divisor setting
uint8 tickSpdDiv = (CLKCONSTA & 0x38)>>3;
// Check if frequency too low
//if (frequency < (244 >> tickSpdDiv)){ // 244 Hz = 32MHz / 256 (8bit counter) / 4 (up/down counter and toggle on compare) / 128 (max timer prescaler)
// buzzerStop(); // A lower tick speed will lower this number accordingly.
// return 0;
//}
// Calculate nr of ticks required to achieve target frequency
uint32 ticks = (8000000/frequency) >> tickSpdDiv; // 8000000 = 32M / 4;
// Fit this into an 8bit counter using the timer prescaler
while ((ticks & 0xFFFFFF00) != 0)
{
ticks >>= 1;
prescaler += 32;
}
// Update registers
T3CTL &= ~0xE0;
T3CTL |= prescaler;
T3CC0 = (uint8)ticks;
// Start timer
T3CTL |= 0x10;
// return 1;
}
void massagerStop(void)
{
T3CTL &= ~0x10; // Stop timer 3
P1SEL &= ~0x44;
P1_6 = 0;
P1_2 = 0;// massager
}
谢谢了
lincoln
你好,
你massagerStart()函数是放在那里了?
我感觉你程序在执行时候根本没有驱动马达,所以你的GPIO都没高低电平的变化。
你好,michael
放在keyfobdemo.c这个函数里面
static void keyfobapp_HandleKeys( uint8 shift, uint8 keys )
{
........................................
........................................
if ( keys & HAL_KEY_SW_2 )
{
SK_Keys |= SK_KEY_RIGHT;
// if device is not in a connection, pressing the right key should toggle
// advertising on and off
if( gapProfileState != GAPROLE_CONNECTED )
{
massagerStart()
}
按启动开关后,闪灯了,不连接app。按右键确实没反应。量三极管电源是低电平。
告诉我怎么做才能让三极管导通,马达振动起来。我头大。
谢谢了
lincoln
麻烦ti的工程师给与帮助。现在一头雾水,找不到方向与原因。
谢谢
祝好
lincoln