大家好
公司上一个新项目,用蓝牙控制马达按摩,现请教几个问题:
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都没高低电平的变化。
TI中文支持网


