微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 振动按摩检查电池充放电

振动按摩检查电池充放电

时间:10-02 整理:3721RD 点击:

大家好
公司上一个新项目,用蓝牙控制马达按摩,现请教几个问题:
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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top