TI中文支持网
TI专业的中文技术问题搜集分享网站

振动按摩检查电池充放电

大家好
公司上一个新项目,用蓝牙控制马达按摩,现请教几个问题:
1)我仔细比较,发现用keyfob的project改比较合适。是否有更合适的project。
2)此按摩器要充电。因此只选择cc2541(2540好像不支持usb)。能支持usb并充电。
3)要用1个port端口来检查电池充放电。当电池电量低于多少就报警,充电就显示,充满就提示什么的。
没找到在哪块程序。
谢谢
祝好
lincoln

da qin zheng sheng:

cc2540带usb接口

da qin zheng sheng:

锂电池充电可以找德州仪器专用充电管理芯片

dongdong0071:

电池放电电量检测一般用的是芯片内部ADC检测,充电需要加入充电芯片

yuhua lincoln:

回复 dongdong0071:

你好!

  我在硬件设计上用 me4054来管理充放电。用xc6206来把4.2v降成3.2v为cc2451供电。留p0-0(你讲adc)的来检查充放电。

我现在keyfob这个工程文件来改,控制马达按摩振动。

电池检测是否是改battservice.c,怎么改呀。

1)不知怎么检测电池容量。

2)电池充放电是否跟cc2541固件无关。有关的话,改哪里来决定充放电。

3)是否当电量不够,就置p0-0为1报警要求充电,或当充满亮灯。当电量够时就让p0_0为0.,不亮灯,不报警。

现在一头雾水。谢谢

lincoln

kqian0327:

你好,

keyfob,peripheral工程都适合你的应用。

CC2540支持USB,CC2541不支持。

你可以用ADC直接采集电压即可。

yuhua lincoln:

回复 kqian0327:

你好, 我看2541好像能用usb充电呀。

   我用keyfob改了。马达代替了蜂鸣器。把控制马达的三极管的p1_6置1,让三极管导通,但马达并没转动?是否还有哪些地方修改。请赐教。

谢谢

lincoln

yuhua lincoln:

回复 yuhua lincoln:

急,有人能帮下吗?谢了。

kqian0327:

回复 yuhua lincoln:

你好,

你的描述过于抽象。

具体一点,你确认P1_6有输出吗?电平是高电平还是无无反应?

你的软件是如何处理的,有驱动P1.6管脚吗?

yuhua lincoln:

回复 kqian0327:

你好,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 2P1DIR |= 0x44; // P1.6 ,p1.2massagerP1SEL |= 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

kqian0327:

回复 yuhua lincoln:

你好,

你massagerStart()函数是放在那里了?

我感觉你程序在执行时候根本没有驱动马达,所以你的GPIO都没高低电平的变化。

赞(0)
未经允许不得转载:TI中文支持网 » 振动按摩检查电池充放电
分享到: 更多 (0)